package com.pangu.core.engine.game.task.sangong;

import java.util.List;

import com.pangu.core.BMDataContext;
import com.pangu.core.cache.CacheHelper;
import com.pangu.core.engine.game.ActionTaskUtils;
import com.pangu.core.engine.game.BeiMiGameEvent;
import com.pangu.core.engine.game.BeiMiGameTask;
import com.pangu.core.engine.game.impl.SangongBoard;
import com.pangu.core.engine.game.impl.UserBoard;
import com.pangu.core.engine.game.task.AbstractTask;
import com.pangu.util.GameUtils;
import com.pangu.util.rules.model.Board;
import com.pangu.web.model.GameRoom;
import com.pangu.web.model.PlayUserClient;

/**
 * 
 * Description:
 *
 * @author abo
 * @date 2018年3月26日
 */
public class CreateSangongAutoTask extends AbstractTask implements BeiMiGameTask {

	private long timer;
	private GameRoom gameRoom = null;
	private String orgi;

	public CreateSangongAutoTask(long timer, GameRoom gameRoom, String orgi) {
		super();
		this.timer = timer;
		this.gameRoom = gameRoom;
		this.orgi = orgi;
	}

	@Override
	public long getCacheExpiryTime() {
		return System.currentTimeMillis() + timer * 1000; // 5秒后执行
	}

	/**
	 * 加入ai，然后发牌开始游戏
	 */
	public void execute() {
		// DuZhuBoard board = (DuZhuBoard)
		// CacheHelper.getBoardCacheBean().getCacheObject(gameRoom.getId(),
		// gameRoom.getOrgi());
		// Player randomCardPlayer = null, catchPlayer = null;
		// int index = 0;
		// if (board != null) {
		// /**
		// * 抢地主，首个抢地主的人 在发牌的时候已经生成
		// */
		// for (int i = 0; i < board.getPlayers().length; i++) {
		// Player player = board.getPlayers()[i];
		// // 这里测试默认为庄家
		// if (randomCardPlayer == null && !player.isRandomcard()) {
		// randomCardPlayer = player;
		// index = i;
		// break;
		// }
		// }
		// if (randomCardPlayer.isDocatch()) {
		// catchPlayer = board.next(index);
		// } else {
		// catchPlayer = randomCardPlayer;
		// }
		// /**
		// * 第二次抢地主条件： 1、抓到随机牌的人 2、已经叫过一次地主了 3、其他有人抢了地主 4、首次地主选择 了 叫地主
		// */
		// if (catchPlayer == null) {
		// /**
		// * 抓到随机牌的人如果选择了不叫地主，则二次选择的玩家是下一个 抢了地主的玩家
		// */
		// if (randomCardPlayer.isRecatch() == false &&
		// !board.getBanker().equals(randomCardPlayer.getPlayuser())
		// && randomCardPlayer.isAccept()) {
		// catchPlayer = randomCardPlayer; // 起到地主牌的人第二次抢地主 ， 抢完就结束了
		// randomCardPlayer.setRecatch(true);
		// } else if (board.getBanker() == null) {
		// // 流局了
		// } else if (!StringUtils.isBlank(board.getBanker()) &&
		// randomCardPlayer.isAccept() == false
		// && randomCardPlayer.isDocatch()) {
		// // 下一个抢地主的人
		// Player temp = board.nextPlayer(index);
		// if (temp.isAccept() && temp.isRecatch() == false) {
		// catchPlayer = temp;
		// temp.setRecatch(true);
		// }
		//
		// }
		// }
		// }
		/**
		 * 地主抢完了即可进入玩牌的流程了，否则，一直发送 AUTO事件，进行抢地主
		 */
		// if (catchPlayer != null) {
		// catchPlayer.setDocatch(true);// 抢过了
		// // board.setBanker(catchPlayer.getPlayuser()); //玩家 点击 抢地主按钮后 赋值
		// sendEvent("catch", new GameBoard(catchPlayer.getPlayuser(),
		// board.isDocatch(), catchPlayer.isAccept(),
		// board.getRatio()), gameRoom);
		//
		// boolean isNormal = true;
		// List<PlayUserClient> users =
		// CacheHelper.getGamePlayerCacheBean().getCacheObject(gameRoom.getId(), orgi);
		// for (PlayUserClient playUser : users) {
		// if (catchPlayer.getPlayuser().equals(playUser.getId())) {
		// if
		// (!playUser.getPlayertype().equals(BMDataContext.PlayerTypeEnum.NORMAL.toString()))
		// {
		// // AI或托管，自动抢地主，后台配置 自动抢地主的触发时间，或者 抢还是不抢， 无配置的情况下，默认的是抢地主
		// isNormal = false;
		// /**
		// * 根据 配置参数获取是否选择叫地主
		// */
		// board = ActionTaskUtils.doCatch(board, catchPlayer, true);
		// break;
		// }
		// }
		// }
		//
		// if (isNormal) { // 真人
		// super.getGame(gameRoom.getPlayway(), orgi).change(gameRoom,
		// BeiMiGameEvent.AUTO.toString(), 17); // 通知状态机
		// // ,
		// // 此处应由状态机处理异步执行
		// } else { // AI或托管
		// sendEvent("catchresult", new GameBoard(catchPlayer.getPlayuser(),
		// catchPlayer.isAccept(),
		// catchPlayer.isAccept(), board.getRatio()), gameRoom);
		// super.getGame(gameRoom.getPlayway(), orgi).change(gameRoom,
		// BeiMiGameEvent.AUTO.toString(), 2); // 通知状态机
		// // ,
		// // 此处应由状态机处理异步执行
		// board.setDocatch(true); // 变成抢地主
		// }
		//
		// CacheHelper.getBoardCacheBean().put(gameRoom.getId(), board, orgi);
		// } else {
		List<PlayUserClient> playerList = CacheHelper.getGamePlayerCacheBean().getCacheObject(gameRoom.getId(), orgi);

		Board board = GameUtils.playGame(playerList, gameRoom, gameRoom.getLastwinner(), gameRoom.getCardsnum());
		for (Object temp : playerList) {
			PlayUserClient playerUser = (PlayUserClient) temp;
			playerUser.setGamestatus(BMDataContext.GameStatusEnum.PLAYING.toString());
			/**
			 * 更新状态到 PLAYING
			 */
			if (CacheHelper.getApiUserCacheBean().getCacheObject(playerUser.getId(), playerUser.getOrgi()) != null) {
				CacheHelper.getApiUserCacheBean().put(playerUser.getId(), playerUser, orgi);
			}
			/**
			 * 每个人收到的 牌面不同，所以不用 ROOM发送广播消息，而是用 遍历房间里所有成员发送消息的方式
			 */
			SangongBoard sb = new SangongBoard(board, playerUser.getId(), "play");
			ActionTaskUtils.sendEvent(playerUser, sb);
		}

		CacheHelper.getBoardCacheBean().put(gameRoom.getId(), board, gameRoom.getOrgi());
		// 开始打牌，地主的人是最后一个抢了地主的人
		super.getGame(gameRoom.getPlayway(), orgi).change(gameRoom, BeiMiGameEvent.RAISEHANDS.toString()); // 通知状态机
																											// ,全部都抢过地主了把底牌发给最后一个抢到地主的人
		// }
	}
}
